package cc.shacocloud.kotlin.tools.jdbc.impl

import cc.shacocloud.kotlin.tools.jdbc.ResultSetExtractor
import cc.shacocloud.kotlin.tools.jdbc.RowMapper
import java.sql.ResultSet

/**
 *委派的 ResultSetExtractor 接口的适配器实现到一个 RowMapper，它应该为每一行创建一个对象。
 * 每个对象都添加到此 ResultSetExtractor 的结果列表中。
 */
class RowMapperResultSetExtractor<T>(
    private val rowMapper: RowMapper<T>,
    private val rowsExpected: Int = 0
) : ResultSetExtractor<List<T>> {

    override fun extractData(rs: ResultSet): List<T> {
        val results = if (this.rowsExpected > 0) ArrayList<T>(this.rowsExpected) else arrayListOf()
        var rowNum = 0
        while (rs.next()) {
            val mapRow = rowMapper.mapRow(rs, rowNum++)
            if (mapRow != null) {
                results.add(mapRow)
            }
        }
        return results
    }
}
